<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016-03-29
 * Time: 10:04
 */

/**
 * @param $path
 * @return bool|mixed|string 路径
 * 使用__FILE__等，产生真实路径时，替换中间的‘\\’
 */
function dir_path($path){
    if(empty($path))
        return false;
    $path = str_replace('\\', '/', $path);
    if(substr($path, -1) != '/'){
        $path .= '/';
    }
    return $path;
}

/**
 * @param $path 需要创建的路径
 * @param int $mode
 * @return bool 路径是否被创建
 * 创建文件夹
 */
function dir_create($path, $mode=0777){
    if(is_dir($path))
        return true;
    $path = dir_path($path);
    $temp = explode('/', $path);
    $dir = '';
    if(is_array($temp)){
        foreach($temp as $v){
            $dir .= $v.'/';
            if(is_dir($dir))
                continue;
            mkdir($dir, 0777, true);
            chmod($dir, 0777);
        }
    }
    return is_dir($path);
}

/**
 * @param $fromdir  源文件夹
 * @param $todir    目标文件夹
 * @return bool 成功返回true,失败返回false
 * 复制文件夹
 */
function dir_copy($fromdir, $todir){
    $fromdir = dir_path($fromdir);
    $todir = dir_path($todir);
    if(!is_dir($fromdir))
        return false;
    if(!is_dir($todir))
        dir_create($todir);
    //取出列表
    $file_list = glob($fromdir.'*');
    if(is_array($file_list)&&!empty($file_list)){
        foreach($file_list as $v){
            $file_path = $todir.basename($v);
            if(is_dir($file_path)){
                dir_copy($v, $file_path);
            }else{
                @copy($v, $file_path);
                @chmod($file_path, 0777);
            }
        }
    }
    return true;
}

/**
 * @param $path 源路径
 * @param string $ext   扩展名
 * @param array $list   返回数组信息
 * @return array
 * 返回文件列表
 */
function dir_list($path, $ext = '', $list=array()){
    $path = dir_path($path);
    $file_list = glob($path.'*');
    foreach($file_list as $v){
        if(!empty($ext) || pathinfo($v, PATHINFO_EXTENSION ) == $ext){
            $list[] = $v;
            if(is_dir($v)){
                dir_list($v, $ext, $list);
            }
        }
    }
    return $list;
}

/**
 * @param $path 源路径
 * @param int $parent_id 所属文件夹
 * @param array $dirs 返回文件将夹层级结构的的array数据
 */
function dir_tree($path, $parent_id = 0, $dirs = array()){
    $path = dir_path($path);
    global $dir_id;
    if($parent_id == 0)
        $dir_id = 0;
    $dir_list = glob($path.'*');
    foreach($dir_list as $v){
        if(is_dir($v)){
            $dir_id++;
            $dirs[$dir_id] = array('id'=>$dir_id, 'parent_id'=>$parent_id, 'name'=>basename($v), 'dir'=>$v.'/');
            $dirs = dir_tree($v, $dir_id, $dirs);
        }
    }
}

/**
 * @param $path 源路径
 * @return bool 返回文件夹删除结果
 */
function dir_delete($path){
    $path = dir_path($path);
    if(!is_dir($path)){
        return false;
    }
    $file_list = glob($path.'*');
    foreach($file_list as $v){
        if(is_dir($v))
            dir_delete($path);
        @unlink($v);
    }
    return @rmdir($path);
}